package com.gengzp.rpc.core;

import com.gengzp.rpc.exception.RpcException;
import com.gengzp.rpc.model.common.req.RpcRequest;
import com.gengzp.rpc.model.common.resp.RpcResponse;
import com.gengzp.rpc.model.remoteTransaction.req.RpcRollbackRequest;

/**
 * @ClassName RpcProducerCoreFunc
 * @Description rpc远程调用生产者端核心方法接口
 * @Author gengzp
 * @Date 2025/8/23 18:02
 */
public interface RpcProducerCoreFunc {

    /**
     * 执行远程调用-生产者端
     * <p>远程调用被调用方的逻辑</p>
     *
     * @param req 远程调用请求参数
     * @return 远程调用结果
     */
    RpcResponse<?> doExecuteRemoteCallProducer(RpcRequest req) throws RpcException;

    /**
     * 执行远程事务回滚逻辑-生产者端
     * <p>事务回滚逻辑</p>
     *
     * @param req 回滚请求参数
     * @return 回滚结果
     */
    RpcResponse<?> doRemoteTransactionRollback(RpcRollbackRequest req) throws RpcException;

}
